package model;

import manager.IAnalizadorSintactico;
import manager.IToken;
import manager.ITokenStream;

public class Parametros  extends AbstractAnalizadorSintactico implements IAnalizadorSintactico {
	
	/* INICIALIZACION */	
	public Parametros ( ITokenStream ts ) {
		super(ts, false);
	}
	public Parametros ( ITokenStream ts, boolean debugMode ) {
		super(ts,debugMode);
	}

	
	/** 
	 * Devuelve true si reconoce multiples parametros en la llamada a un procedimiento o funcion
	 */
	public boolean reconocer () {
		
		boolean recognized = true;
		
		//----------------------------------------------
		//Agrego info de debug de la produccion
		em.debug( "Reconocer Parametros:", this.getTokenSiguiente() );
		//----------------------------------------------
		
		/* <PARAMETROS> ->  , <EXP> <PARAMETROS> | 
         *                      LAMBDA					 */
		while ( this.getTokenSiguiente().equals( new Token(IToken.TYPE_COMA) ) ){
			
			// <PARAMETROS> ->  , <EXP> <PARAMETROS>
		
			//----------------------------------------------
			//Agrego info de debug de la produccion
			em.debug( "<PARAMETROS> ->  , <EXP> <PARAMETROS>", this.getTokenSiguiente() );
			//----------------------------------------------
			
			this.reconocerToken(IToken.TYPE_COMA);
			
			// Reconocer Expresion
			IAnalizadorSintactico expresion = new Expresion(this.tokenStream,this.debugMode);
			recognized &= expresion.reconocer();
		}	
		
		return recognized;
	}
	
	public static boolean primeros(IToken token) {
		return  token.equals( new Token(IToken.TYPE_COMA) );
	}
}
